#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>


typedef int HPDataType;
typedef struct Heap
{
    HPDataType* _a;
    int _size;
    int _capacity;
}Heap;

// 堆的构建
void HeapCreate(Heap* hp, HPDataType* a, int n);
// 堆的销毁
void HeapDestory(Heap* hp);
// 堆的插入
void HeapPush(Heap* hp, HPDataType x);
// 堆的删除
void HeapPop(Heap* hp);
// 取堆顶的数据
HPDataType HeapTop(Heap* hp);
// 堆的数据个数
int HeapSize(Heap* hp);
// 堆的判空
int HeapEmpty(Heap* hp);
//向下调整
void AdjustDown(int *arr,int tmp,int father);
//交换
void Swap(int *dest,int* src);
//向上调整
void AdjustUp(int *arr,int tmp,int son);
//堆排
void HeapSort(int *a,int n);

